const sharp = require('sharp');
const fs = require('fs');
const path = require('path');
const { createCanvas } = require('canvas');
const {Canvg,presets} = require('canvg');
const { DOMParser } = require('xmldom'); 


// get overlay
function getOverlay(path, width, x, y) {
    return new Promise(function(resolve, reject) {
        sharp(path)
        .resize(parseInt(width))
        .toBuffer()
        .then(function(data) { 
            return resolve({
                input: data,
                left: parseInt(x),
                top: parseInt(y)
            });
        })
        .catch(function(err) {
            return reject(err);
        });
    });
}

function getFontSvg(svgData) {

    // 指定的宽度
const targetWidth = 800;

// 从SVG的viewBox属性获取原始宽高
const viewBox = svgData.match(/viewBox="(\d+ \d+ \d+ \d+)"/)[1].split(' ');
const origWidth = parseInt(viewBox[2]);
const origHeight = parseInt(viewBox[3]);

// 根据原始宽高比计算目标高度
const aspectRatio = origHeight / origWidth;
const targetHeight = targetWidth * aspectRatio;

    const canvas = createCanvas(targetWidth, targetHeight); // 设定画布大小，需根据实际SVG尺寸调整
    const ctx = canvas.getContext('2d');

    
    const v = Canvg.fromString(ctx, svgData, {
        DOMParser: DOMParser,
        ignoreDimensions: true,  // 忽略SVG内的尺寸，使用Canvas的尺寸
    scaleWidth: targetWidth,
    scaleHeight: targetHeight
    });
    // start rendering
    v.start();

    // Convert canvas to PNG 
    const buffer = canvas.toBuffer('image/png');
    fs.writeFile('image/output.png', buffer, (err) => {
        if (err) {
            console.log(err)
        } else {
            console.log('PNG file has been saved successfully.');
        }
    })
}

const svgData = `
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 20" width="100%" height="100%">
  <style>
    @font-face {
      font-family: 'MyFont';
      src: url('./MBCorpoATitleCond-Regular-Web.woff2') format('woff');
    }
    
    text {
      font-family: 'MyFont';
      font-size: 80px;
    }
  </style>
  <text y="80">Hello, World!</text>
</svg>`
;
// getFontSvg(svgData)

// const bg = 'image/G500.tif' // 9MB
const bg = 'image/KV_RED_CMYK.tif' // 920MB
// get metadata
sharp(bg).metadata.then((metadata) => {
    console.log(metadata)
})
const { density } = metadata
// 加载CMYK的TIFF背景图片
sharp(bg)
 .raw()
 .toBuffer({ resolveWithObject: true })
 .then(({ data, info }) => {
    console.log(info)
    const { width, height } = info
    Promise.all([
        getOverlay('image/text_b.svg', width * 0.1, width * 0.1, height * 0.1),
        getOverlay('image/text_w.svg', width * 0.1, width * 0.1, height * 0.3),
        getOverlay('image/online_text.svg', width * 0.1, width * 0.1, height * 0.5)
    ])
    .then((overlays) => {
        return sharp(data, {
            raw: info,
            density
        })
        .composite(overlays)
        .toFile('image/output.tiff', {
            quality: info.quality,
            // 尝试提取和设置ICC色彩配置文件，可能需要根据实际情况调整
            iccProfile: info.iccProfile? fs.readFileSync(info.iccProfile) : null
        })
    })
    .catch((err) => {
        console.log('overlays', err)
    })

    // 加载SVG图片
    // return sharp('image/text_b.svg')
    //  .toBuffer()
    //  .then((svgBuffer) => {
    //     // 指定SVG在背景图上的大小和位置
    //     const width_svg = 200; // 示例宽度，可根据需求修改
    //     const height_svg = 150; // 示例高度，可根据需求修改
    //     const x_position = 100; // 示例x坐标位置，可根据需求修改
    //     const y_position = 150; // 示例y坐标位置，可根据需求修改

    //     // 调整SVG图片的大小
    //     return sharp(svgBuffer)
    //      .resize(width_svg, height_svg)
    //      .toBuffer()
    //      .then((resizedSvgBuffer) => {
    //         // 将调整大小后的SVG图片嵌入到背景图片的指定位置
    //         return sharp(data, {
    //           raw: info
    //         })
    //          .composite([{
    //             input: resizedSvgBuffer,
    //             left: x_position,
    //             top: y_position
    //           }])
    //          .toFile('image/output.tiff', {
    //             quality: info.quality,
    //             // 尝试提取和设置ICC色彩配置文件，可能需要根据实际情况调整
    //             iccProfile: info.iccProfile? fs.readFileSync(info.iccProfile) : null
    //           });
    //       });
    //   });
  })
 .catch((err) => {
    console.error(err);
  });